<?php

class AdmRegistro extends TPage {

    public function onLoad($param) {
        parent::onLoad($param);
        if (!$this->IsPostBack) {
            $this->actualizarIntefaz();
        }
    }

    private function actualizarIntefaz() {
        $arr = $this->obtenerDatos();
        $this->iniciarControles($arr);
        $this->mostrarMensaje();
    }

    private function obtenerDatos() {
        $arg = $this->Request["a"];
        if (!Util::isNullOrEmpty($arg)) {
            $id = Util::desencriptarUrl($arg, "id");
            $tipoUsuario = Util::desencriptarUrl($arg, "tipoUsuario");
            $this->setViewState("id", $id);
            $this->setViewState("tipoUsuario", $tipoUsuario);
            $oUsuarioBLL = new UsuarioBLL();
            $arr = $oUsuarioBLL->obtenerPorId($id);
        } else {
            $this->setViewState("id", "-1");
            $this->setViewState("tipoUsuario", "-1");
            $arr = array();
        }

        return $arr;
    }

    private function iniciarControles($arr) {
        $id = $this->getViewState("id");
        $tipoUsuarioDesdeQueryString = $this->getViewState("tipoUsuario");
        $oEscort = new Escort();

        if (count($arr) > 0) {
            $oUsuario = new Usuario();
            $oUsuario = $arr;

            $intIdEstado = $oUsuario->getIdEstado();
            $intIdTipoUsuario = $oUsuario->getIdTipoUsuario();
            $strUsuario = $oUsuario->getUsuario();
            $strEmail = $oUsuario->getEmail();
            $strFechaNacimiento = $oUsuario->getFechaNacimiento();
            $strSexo = $oUsuario->getSexo();
            $intIdProfesion = $oUsuario->getIdProfesion();
            $intIdComuna = $oUsuario->getIdComuna();
            $intIdRegion = $oUsuario->getIdRegion();

            if ($intIdTipoUsuario == Tipo_usuario::ESCORT) {
                $oEscortBLL = new EscortBLL();
                $arrEscort = $oEscortBLL->obtenerPorIdUsuario($id);
                $oEscort = $arrEscort;
            }
        } else {
            $intIdEstado = Combo::VALOR_SELECCIONE;
            $intIdTipoUsuario = $tipoUsuarioDesdeQueryString;
            $strUsuario = "";
            $strEmail = "";
            $strFechaNacimiento = "";
            $strSexo = Combo::VALOR_SELECCIONE;
            $intIdProfesion = Combo::VALOR_SELECCIONE;
            $intIdComuna = Combo::VALOR_SELECCIONE;
            $intIdRegion = Combo::VALOR_SELECCIONE;
        }

        //formatea valores
        $strFechaNacimiento = Util::isDatetimeEmpty($strFechaNacimiento, "");
        if (!Util::isNullOrEmpty($strFechaNacimiento)) {
            $strFechaNacimiento = Util::fechaDateTimeANormal($strFechaNacimiento);
        }

        switch ($intIdTipoUsuario) {
            case Tipo_usuario::ADMINISTRADOR;
                $tipoUsuario = "ADMINISTRADOR";
                $querystringIdTipoUsuario = -1;
                break;
            case Tipo_usuario::MODERADOR;
                $tipoUsuario = "MODERADOR";
                $querystringIdTipoUsuario = -1;
                break;
            case Tipo_usuario::USUARIO;
                $tipoUsuario = "USUARIO";
                $querystringIdTipoUsuario = -1;
                break;
            case Tipo_usuario::ESCORT;
                $tipoUsuario = "ESCORT";
                $querystringIdTipoUsuario = $intIdTipoUsuario;
                break;
            default:
                $tipoUsuario = "USUARIO";
                $querystringIdTipoUsuario = $intIdTipoUsuario;
                break;
        }

        $this->ltTitulo->Text = (($id == "-1") ? "Nuevo" : "Modificar") . " " . $tipoUsuario;
        $this->ddlEstado->asignarSelectedValue($intIdEstado);
        $this->ddlTipoUsuario->asignarSelectedValue(($intIdTipoUsuario == -1) ? Combo::VALOR_SELECCIONE : $intIdTipoUsuario);
        $this->ddlTipoUsuario->Enabled = ($intIdTipoUsuario == -1) ? true : false;
        $this->txtUsuario->Text = $strUsuario;
        $this->txtEmail->Text = $strEmail;
        $this->txtFechaNacimiento->Text = $strFechaNacimiento;
        $this->ddlSexo->asignarSelectedValue($strSexo);
        $this->ddlProfesion->asignarSelectedValue($intIdProfesion);
        $this->cargarDatosEscort($oEscort);
        $this->setViewState("idRegion", $intIdRegion);
        $this->setViewState("idComuna", $intIdComuna);

        $arrEliminar = array(
            "idRegistro" => $id,
            "urlAjax" => "Usuario.Ajax",
            "opcionAjax" => "Eliminar",
            "urlRespuesta" => "Usuario.AdmListar",
            "parametrosUrlRespuesta" => array(
                "tipoUsuario" => $querystringIdTipoUsuario
            )
        );
        $opcionesEliminar = Util::jsonOpcionesEliminar($arrEliminar);
        $this->btnEliminar->Visible = ($id == "-1") ? false : true;
        $this->btnEliminar->Attributes->Add("onclick", "eliminarRegistro(" . $opcionesEliminar . ")");

        $arg = Util::encriptarUrl(array("tipoUsuario" => $querystringIdTipoUsuario));
        $this->btnVolver->NavigateUrl = "index.php?page=Usuario.AdmListar&a=" . $arg;
        $this->Page->ClientScript->registerEndScript("iniciarControles", "mostrarPanelTipoUsuario();");

        if ($id == "-1") {
            $this->Page->ClientScript->registerEndScript("iniciarControles2", "jQuery(\"#ui-id-5\").hide();");
        }
    }

    private function mostrarMensaje() {
        $arg = $this->Request["a"];
        if (!Util::isNullOrEmpty($arg)) {
            $tipoMensaje = Util::desencriptarUrl($arg, "tipoMensaje");
            $mensaje = Util::desencriptarUrl($arg, "mensaje");

            if (!Util::isNullOrEmpty($mensaje)) {
                Util::mostrarMsj($this->Page, "da-ex-val-error", $mensaje, $tipoMensaje);
            }
        }
    }

    private function cargarDatosEscort($oEscort) {
        $id = $oEscort->getId();
        if (is_null($id)) {
            $strNombre = "";
            $strNacionalidad = Combo::VALOR_SELECCIONE;
            $strIdiomas = "";
            $strTelefono = "";
            $strDireccion = "";
            $boolDestacada = false;
            $boolCertificada = false;
            $intPeso = Combo::VALOR_SELECCIONE;
            $intAltura = Combo::VALOR_SELECCIONE;
            $strMedidas = "";
            $strOjos = Combo::VALOR_SELECCIONE;
            $strEdad = "";
            $strPiel = Combo::VALOR_SELECCIONE;
            $strPelo = Combo::VALOR_SELECCIONE;
            $strHorario = "";
            $strValorNormal = "";
            $strValorPremium = "";
            $strValorMedia = "";
            $strValorPromo = "";
            $boolIndependiente = "";
            $strDescripcion = "";
        } else {
            $strNombre = $oEscort->getNombre();
            $strNacionalidad = $oEscort->getNacionalidad();
            $strIdiomas = $oEscort->getIdiomas();
            $strTelefono = $oEscort->getTelefono();
            $strDireccion = $oEscort->getDireccion();
            $boolDestacada = $oEscort->getDestacada();
            $boolCertificada = $oEscort->getCertificada();
            $intPeso = $oEscort->getPeso();
            $intAltura = $oEscort->getAltura();
            $strMedidas = $oEscort->getMedidas();
            $strOjos = $oEscort->getOjos();
            $strEdad = $oEscort->getEdad();
            $strPiel = $oEscort->getPiel();
            $strPelo = $oEscort->getPelo();
            $strHorario = $oEscort->getHorario();
            $strValorNormal = $oEscort->getValorNormal();
            $strValorPremium = $oEscort->getValorPremium();
            $strValorMedia = $oEscort->getValorMedia();
            $strValorPromo = $oEscort->getValorPromo();
            $boolIndependiente = $oEscort->getIndependiente();
            $strDescripcion = $oEscort->getDescripcion();
        }

        $this->txtNombreDiosa->Text = $strNombre;
        $this->ddlNacionalidad->asignarSelectedValue($strNacionalidad);
        $this->txtIdiomas->Text = $strIdiomas;
        $this->txtTelefono->Text = $strTelefono;
        $this->txtDireccion->Text = $strDireccion;
        $this->chkDestacada->Checked = $boolDestacada;
        $this->chkCertificada->Checked = $boolCertificada;
        $this->ddlPeso->asignarSelectedValue($intPeso);
        $this->ddlAltura->asignarSelectedValue($intAltura);
        $this->txtMedidas->Text = $strMedidas;
        $this->ddlOjos->asignarSelectedValue($strOjos);
        $this->txtEdad->Text = $strEdad;
        $this->ddlPiel->asignarSelectedValue($strPiel);
        $this->ddlPelo->asignarSelectedValue($strPelo);
        $this->txtHorario->Text = $strHorario;
        $this->txtValorNormal->Text = $strValorNormal;
        $this->txtValorPremium->Text = $strValorPremium;
        $this->txtValorMedia->Text = $strValorMedia;
        $this->txtValorPromo->Text = $strValorPromo;
        $this->chkIndependiente->Checked = $boolIndependiente;
        $this->ltServicios->Text = $this->listarServicios($id);
        $this->txtDescripcion->Text = $strDescripcion;

        $this->wucDestacadas->IdEscort = $id;
        $this->wucDestacadas->cargarDatos();
        $this->wucTop5->IdEscort = $id;
        $this->wucTop5->cargarDatos();
        $this->wucTodas->IdEscort = $id;
        $this->wucTodas->cargarDatos();
        $this->wucUltimasDiosas->IdEscort = $id;
        $this->wucUltimasDiosas->cargarDatos();
        $this->wucPerfil->IdEscort = $id;
        $this->wucPerfil->cargarDatos();
    }

    private function grabarDatosEscort($idUsuario) {
        $oEscort = new Escort();
        $oEscortBLL = new EscortBLL();
        $arrEscort = $oEscortBLL->obtenerPorIdUsuario($idUsuario);
        if (!is_null($arrEscort)) {
            $oEscort = $arrEscort;
        }

        $oEscort->setAltura($this->ddlAltura->obtenerSelectedValue());
        $oEscort->setDestacada($this->chkDestacada->Checked);
        $oEscort->setCertificada($this->chkCertificada->Checked);
        $oEscort->setDireccion($this->txtDireccion->Text);
        $oEscort->setEdad($this->txtEdad->Text);
        $oEscort->setHorario($this->txtHorario->Text);
        $oEscort->setIdComuna($this->Request["ddlComuna"]);
        $oEscort->setIdEstado($this->ddlEstado->obtenerSelectedValue());
        $oEscort->setIdUsuario($idUsuario);
        $oEscort->setIdiomas($this->txtIdiomas->Text);
        $oEscort->setIndependiente($this->chkIndependiente->Checked);
        $oEscort->setMedidas($this->txtMedidas->Text);
        $oEscort->setNacionalidad($this->ddlNacionalidad->obtenerSelectedValue());
        $oEscort->setNombre($this->txtNombreDiosa->Text);
        $oEscort->setOjos($this->ddlOjos->obtenerSelectedValue());
        $oEscort->setPelo($this->ddlPelo->obtenerSelectedValue());
        $oEscort->setPeso($this->ddlPeso->obtenerSelectedValue());
        $oEscort->setPiel($this->ddlPiel->obtenerSelectedValue());
        $oEscort->setTelefono($this->txtTelefono->Text);
        $oEscort->setValorMedia($this->txtValorMedia->Text);
        $oEscort->setValorNormal($this->txtValorNormal->Text);
        $oEscort->setValorPremium($this->txtValorPremium->Text);
        $oEscort->setValorPromo($this->txtValorPromo->Text);
        $oEscort->setDescripcion($this->txtDescripcion->Text);
        $arrIdServicios = $this->Request["chkServicio"];

        if(is_null($arrIdServicios)){
          $listadoIdServicios = "-1";
        } else {
          $listadoIdServicios = implode(",", $arrIdServicios);
        }

        if (is_null($oEscort->getId())) {
            $resultado = $oEscortBLL->grabar($oEscort);
            $idEscort = $resultado;
        } else {
            $resultado = $oEscortBLL->editar($oEscort);
            $idEscort = $oEscort->getId();
        }

        //elimina los servicios actuales de la escort y los actualiza
        $arrEscort = $oEscortBLL->eliminarServicios($idEscort);
        $arrEscort = $oEscortBLL->grabarServicios($idEscort, $listadoIdServicios);

    }

    public function listarServicios($idEscort) {
      if(is_null($idEscort)) { $idEscort = "-1"; }
      $oServicioBLL = new ServicioBLL();
      $arrServicio = $oServicioBLL->obtenerPorIdEscort($idEscort);
      $template = "<li class=\"span3\"><input id=\"chkServicio_{#ID}\" type=\"checkbox\" name=\"chkServicio[]\" value=\"{#VALOR}\" {#CHECKED} />&nbsp;<label for=\"chkServicio_{#ID}\">{#NOMBRE}</label><li>";
      $html = "";

            if (count($arrServicio) == 0) {
                $html = "<span class=\"da-form-label\"><i>No tiene servicios asociadas</i></span>";
            } else {
                $html .= "<div class=\"da-form-row\">";
                $html .= "  <ul class=\"da-form-list inline\">";

                foreach ($arrServicio as $oServicio_escort) {
                    $templateAux = $template;
                    $templateAux = str_replace("{#ID}", $oServicio_escort->getId(), $templateAux);
                    $templateAux = str_replace("{#NOMBRE}", $oServicio_escort->getNombre(), $templateAux);
                    $templateAux = str_replace("{#VALOR}", $oServicio_escort->getId(), $templateAux);
                    $templateAux = str_replace("{#CHECKED}", ($oServicio_escort->getRealizaServicio() == "1" ? "checked":""), $templateAux);
                    $html .= $templateAux;
                }

                $html .= " </ul>";
                $html .= "</div>";
            }
      return $html;
    }


    public function btnGrabarClick($sender, $param) {
        $mensaje = "";
        $tipoMensaje = "";
        $id = $this->getViewState("id");
        $oUsuario = new Usuario();
        $oUsuarioBLL = new UsuarioBLL();

        if ($id != -1) {
            $arr = $oUsuarioBLL->obtenerPorId($id);
            $oUsuario = $arr;
        }

        $oUsuario->setId($id);
        $oUsuario->setIdEstado($this->ddlEstado->obtenerSelectedValue());
        $oUsuario->setIdTipoUsuario($this->ddlTipoUsuario->obtenerSelectedValue());
        $oUsuario->setUsuario($this->txtUsuario->Text);
        $oUsuario->setEmail($this->txtEmail->Text);
        $oUsuario->setFechaNacimiento(Util::fechaNormalADateTime($this->txtFechaNacimiento->Text));
        $oUsuario->setSexo($this->ddlSexo->obtenerSelectedValue());
        $oUsuario->setIdProfesion($this->ddlProfesion->obtenerSelectedValue());
        $oUsuario->setIdComuna(Util::isNull($this->Request["ddlComuna"],Combo::VALOR_SELECCIONE));
        $strPassword = $this->txtPassword->Text;

        if ($id == "-1") {
            $oUsuario->setPassword($strPassword);
            $resultado = $oUsuarioBLL->grabar($oUsuario);
            if (is_numeric($resultado)) {
                $id = $resultado;
            }
        } else {
            $oUsuario->setNuevaPassword($strPassword);
            $resultado = $oUsuarioBLL->editar($oUsuario);
        }

        //si el usuario es de tipo escort entonces graba los datos relacionados
        if ($oUsuario->getIdTipoUsuario() == Tipo_usuario::ESCORT) {
            $this->grabarDatosEscort($id);
        }

        if (!Util::isNullOrEmpty($resultado) && !is_numeric($resultado)) {
            $tipoMensaje = Util::MENSAJE_ERROR;
            $mensaje = $resultado;
        } else {
            $tipoMensaje = Util::MENSAJE_OK;
            $mensaje = "El registro fue grabado con &eacute;xito";
        }

        $arg = Util::encriptarUrl(array(
                    "id" => $id,
                    "tipoMensaje" => $tipoMensaje,
                    "mensaje" => $mensaje,
                    "tipoUsuario" => $this->ddlTipoUsuario->obtenerSelectedValue()
                        )
        );
        $this->Response->Redirect("index.php?page=Usuario.AdmRegistro&a=" . $arg);
    }

}

?>
